//导入
// import 类名 from "路径"  //同层级的路径前面加上./
const {ccclass, property} = cc._decorator;

/*
继承关系：
1.脚本 - cc.Component
2.组件 - cc.Component

访问组件的方式：
    1.访问当前节点/访问当前节点的Node组件：this.node
    2.访问其他组件：this.getComponent(组件名)
        例：this.getComponent(Theme).pageView//访问其他脚本上的组件
    3.访问子节点上的组件:cc.getComponentInChildren(组件名)  (查找顺序:自身 - 子节点)
    4.访问子节点上的所有该组件(返回数组)：cc.getComponentsInChildren(组件名)
    5.获取当前节点的某一种类型的所有组件：getComponents(组件名)
    6.访问其他节点n的组件:n/n.getComponent()
    7.通过组件component访问其他组件：组件.getComponent()

访问节点:
1.存在父子级关系:cc.Node
    1.通过名字获取子节点:节点.getChildByName(子节点的名字)
    2.获取所有子节点(返回数组):节点.children
    3.获取子节点数量:节点.childrenCount
    4.获取父节点:节点.parent/节点.getParent()

2.不存在父子级关系
    1.全局搜索:cc.find(1.路径, 2.相对的父节点)
        例:cc.find("Canvas/pageView/view/content")
           cc.find("view/content", pageView.node)
    2.通过组件查找节点:组件.节点

组件的勾选:启用/不启用(组件.enabled)
节点的勾选:激活/不激活(节点.active)
销毁节点/组件:节点/组件.destroy()
    this.destroy()  //销毁当前脚本对象
    this.node.destroy() //销毁当前节点

有哪几种方式可以不显示节点？
1.不激活节点
2.不启用渲染的组件
3.销毁节点或者渲染组件
4.设置透明度为0
5.把节点设置到屏幕外


作业: 1.把之前的场景改为代码形式
      2.通过读取文档添加声音
*/

@ccclass
export default class Stages extends cc.Component {
    private pageView:cc.PageView = null         //翻页容器
    private ss_towers:cc.Sprite = null          //显示炮塔精灵
    private playNode:cc.Node = null             //开始游戏按钮

    @property(cc.SpriteAtlas)
    ss_towersAtlas:cc.SpriteAtlas = null        //资源图集

    @property(cc.SpriteAtlas)
    uiSpriteAtlas:cc.SpriteAtlas = null         //资源图集

    private items = []

    private index = 1

    onLoad(){
        this.pageView = this.getComponentInChildren(cc.PageView)
        this.playNode = this.node.getChildByName("playBtn")
        this.ss_towers = this.node.getChildByName("ss_towers").getComponent(cc.Sprite)
    }

    start () {
        this.items = this.pageView.getPages()
        this.setCurrentPage(this.pageView.getCurrentPageIndex().toString(), false)
    }

    update (dt) {
        
    }

    onBackBtnClick(){
        //返回选关场景
        cc.director.loadScene("themeScene")
    }

    onHelpBtnClick(){
        //跳转到帮助场景
        cc.director.loadScene("helpScene")
    }

    //滚动容器监听事件
    onPageViewLienerEvent(){
        this.setCurrentPage(this.pageView.getCurrentPageIndex().toString(), false)
        
    }

    //容器内容的点击事件
    onContentClick(event, CustomEventData){
        this.setCurrentPage(CustomEventData, true)
    }

    // 设置当前页的一些效果
    setCurrentPage(index:string, flag:boolean) {
        //设置遮罩
        for(let i = 0; i < this.items.length; i++){
            if(i == parseInt(index)){
                this.items[i].color = new cc.Color(255, 255, 255);
            }else{
                this.items[i].color = new cc.Color(115, 115, 115);
            }
        }

        // 更改炮塔图片
        let filename = ""
        if (parseInt(index) + 1 >= 10){
            filename = `ss_towers_${parseInt(index) + 1}`
        }else{
            filename = `ss_towers_0${parseInt(index) + 1}`
        }
        this.ss_towers.spriteFrame = this.ss_towersAtlas.getSpriteFrame(filename)

        if(flag){
            this.pageView.setCurrentPageIndex(parseInt(index))
        }

        let playSp = this.playNode.getComponent(cc.Sprite)
        let playBtn = this.playNode.getComponent(cc.Button)

        //显示开始游戏还是锁定游戏按钮
        if(parseInt(index) == 0){
            playSp.spriteFrame = this.uiSpriteAtlas.getSpriteFrame("ss_play_normal_CN")
            playBtn.enabled = true
        }else{
            playSp.spriteFrame = this.uiSpriteAtlas.getSpriteFrame("ss_locked_CN")
            playBtn.enabled = false
        }
    }
}


